import fs from 'fs';
import url from 'url';
import yaml from 'yaml';
import path from 'path';

const __filename = url.fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const __yamlDir = path.join(__dirname, '../defSet/character')

class SearchName {
    constructor() {
        // YAML 文件目录
        this.yamlFileDir = __yamlDir;
        // 别名列表
        this.aliasNames = {};
        // 初始化别名列表
        this.#init();
    }

    // 初始化方法，读取目录下的所有 YAML 文件并解析
    #init() {
        fs.readdirSync(this.yamlFileDir).forEach(file => {
            // 只处理 YAML 文件
            if (path.extname(file) !== '.yaml') {
                return;
            }
            // 读取 YAML 文件内容
            const filePath = path.join(this.yamlFileDir, file);
            const data = this.#readYamlFile(filePath);
            if (!data) {
                return;
            }
            // 附加到别名列表
            for (const [name, aliases] of Object.entries(data)) {
                if (Array.isArray(aliases)) {
                    this.aliasNames[name] = aliases;
                }
            }
        });
    }

    // 读取 YAML 文件
    #readYamlFile(filePath) {
        try {
            const fileContents = fs.readFileSync(filePath, 'utf8');
            const data = yaml.parse(fileContents);
            return data;
        } catch (error) {
            console.error('Error reading YAML file:', error);
            return null;
        }
    }

    // 根据别名查找姓名
    findNameByAlias(alias) {
        // 遍历数据，查找别名对应的姓名
        for (const [name, aliases] of Object.entries(this.aliasNames)) {
            if (name == alias) {
                return name;
            }
            if (Array.isArray(aliases) && aliases.includes(alias)) {
                return name;
            }
        }
        return '';
    }

}

export default new SearchName();